Transcrição
Do jeito que o nosso código está, o programador não é avisado em tempo de compilação caso esqueça de sobrescrever o método template. Só saberemos do erro em tempo de runtime. Não queremos essa solução, pois será muito tarde para detectar o problema.
Para resolvermos esse problema, podemos tornar View uma classe abstrata*. Classes abstratas não podem ser instanciadas, apenas herdadas. Essas classes também podem definir um ou mais métodos abstratos que nada mais são do que métodos sem implementação que precisam ser implementados pelas classes filhas.
Alterando nossa classe View:
abstract class View<T> {
private _elemento: Element;
constructor(seletor: string) {
this._elemento = document.querySelector(seletor);
}
update(model: T) {
this._elemento.innerHTML = this.template(model);
}
abstract template(model: T): string;
}
Veja que tanto a classe quando o método template são abstratos. Se não implementarmos o método template nas classes filhas, o TypeScript indicará um erro, lembrando o programador de sua tarefa.